Data Exploration
Projects per year
ggplot(dat) + geom_bar(aes(year), stat="count") + ggtitle("Number of projects per year")

There are very few projects before 2014, and so for simplicity’s sake and to simplify the model just a tad, we remove 2013 and before.
dat = dat[dat$year >= 2014, ]
Projects per month
dat$month <- factor(dat$month)
dat %>%
ggplot() + labs(title="Counts in Months") +
geom_bar(aes(month)) +
scale_x_discrete(labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))

Interestingly, there are a ton of January projects. This might have to do with scraping the site which lists projects chronologically.
Projects per day of the week
dat$day_of_week <- factor(dat$day_of_week)
dat %>%
ggplot() + labs(title="Counts in Days of the Week") +
geom_bar(aes(day_of_week)) +
scale_x_discrete(labels = c("Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"))

Projects from the US
ggplot(dat) + geom_bar(aes(x=factor(from_US)), stat="count") + labs(x="From US", title="Number of projects from US")

Most projects are US based. Reduce the model complexity by restricting to US then.
dat <- dat[dat$from_US == 1, ]
Project durations
Kickstarter projects are usually given 30 days to meet their goal, so most projects revolve around that duration. Some are shorter and some are longer though. Categorize each of those bins.
probs = c(0.0, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0)
labs = c("10", "25", "50", "75", "90", "100")
quants = quantile(dat$duration_float, probs, names=F)
dat$dur_cat = ""
for (i in 1:6) {
dat[dat$duration_float >= quants[i] & dat$duration_float <= quants[i+1], ]$dur_cat = labs[i]
}
dat$dur_cat = factor(dat$dur_cat, ordered = T, levels = labs)
dat %>%
ggplot() + labs(title = "Duration Categories") +
geom_bar(aes(dur_cat, fill=dur_cat), position="dodge")

Project goals, text lengths, and cancer types
We scale/z-score the continuous variables according to how we wish to interpret the coefficients of the model. From Andrew Gelman: “Standardizing puts things on an approximately common scale …. (Standarize for) comparing coefficients for different predictors within a model”. Binary and categorical variables are left as is.
dat$goal_sc <- scale(dat$goal)
dat %>%
ggplot() + labs(title="Goal Amount Distribution") +
geom_density(aes(goal))

dat$text_length_words_sc <- scale(dat$text_length_words)
dat %>%
ggplot() + labs(title="Text Length Distribution") +
geom_density(aes(text_length_words))

dat$photos_sc <- scale(dat$photos)
dat %>%
ggplot() + labs(title="Photos Distribution") +
geom_density(aes(photos))

dat$updates_sc <- scale(dat$updates)
dat %>%
ggplot() + labs(title="Updates Distribution") +
geom_density(aes(updates))

dat$shares_sc <- scale(dat$shares)
dat %>%
ggplot() + labs(title="FB Shares Distribution") +
geom_density(aes(shares))

dat$comments_sc <- scale(dat$comments)
dat %>%
ggplot() + labs(title="Comments Distribution") +
geom_density(aes(comments))

dat$friends_sc <- scale(dat$friends)
dat %>%
ggplot() + labs(title="FB Friends Distribution") +
geom_density(aes(friends))

dat %>%
ggplot() + labs(title="Cancer Type Counts") +
geom_bar(aes(x=cancer_type)) +
theme(axis.text.x=element_text(angle = 60, hjust=1))

Potential outliers which we may want to remove:
# nrow(dat[dat$comments > 25, ])
nrow(dat[dat$goal > 4e5, ])
## [1] 3
dat = dat[dat$goal <= 4e5, ]
nrow(dat[dat$photos > 100, ])
## [1] 1
dat = dat[dat$photos <= 100, ]
nrow(dat[dat$updates > 100, ])
## [1] 7
dat = dat[dat$updates <= 100, ]
nrow(dat[dat$shares > 20000, ])
## [1] 0
dat = dat[dat$shares <= 20000, ]
Status
nrow(dat)
## [1] 1052
In total, we have 1049 iid samples to work with.
dat %>%
ggplot() + labs(title="Goal Amount Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(goal, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="Duration Distribution") + guides(fill=guide_legend(title="Status")) +
geom_bar(aes(dur_cat, fill=fct_recode(factor(status), "Successful"="1", "Failed"="0")), position="dodge") +
theme_minimal()

dat %>%
ggplot() + labs(title="Text Length Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(text_length_words, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="Photos Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(photos, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="Updates Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(updates, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="FB Friends Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(friends, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="Comments Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(comments, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="FB Shares Distribution") + guides(color=guide_legend(title="Status")) +
geom_density(aes(shares, color=fct_recode(factor(status), "Successful"="1", "Failed"="0"))) +
theme_minimal()

dat %>%
ggplot() + labs(title="Cancer Type Counts") + guides(fill=guide_legend(title="Status")) +
geom_bar(aes(x=cancer_type, fill=fct_recode(factor(status), "Successful"="1", "Failed"="0")), position="dodge") +
theme(axis.text.x=element_text(angle = 60, hjust=1))

Removed all random variabes except year because they didn’t help explain any variance in the data beyond what the residuals could capture.
Nesting and Chi2 differences: https://www.psychologie.uzh.ch/dam/jcr:ffffffff-b371-2797-0000-00000fda8f29/chisquare_diff_en.pdf
Model status
# no fixed effects, only random
mod.n = glmer(status ~ (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add duration category
mod.d = glmer(status ~ dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add length of text (in words)
mod.d.l = glmer(status ~ text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add scaled goal amount
mod.d.l.g = glmer(status ~ goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add first instantiation
mod.d.l.g.i = glmer(status ~ inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add photos
mod.d.l.g.i.p = glmer(status ~ photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add updates
mod.d.l.g.i.p.u = glmer(status ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add comments
mod.d.l.g.i.p.u.c = glmer(status ~ comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add friends
mod.d.l.g.i.p.u.c.f = glmer(status ~ friends_sc + comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# add shares
mod.d.l.g.i.p.u.c.f.s = glmer(status ~ shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = "binomial", nAGQ = 0)
anova(mod.n, mod.d, test='Chisq')
## Data: dat
## Models:
## mod.n: status ~ (1 | year)
## mod.d: status ~ dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.n 2 950.62 960.54 -473.31 946.62
## mod.d 7 956.25 990.96 -471.13 942.25 4.3706 5 0.4974
anova(mod.d, mod.d.l, test='Chisq')
## Data: dat
## Models:
## mod.d: status ~ dur_cat + (1 | year)
## mod.d.l: status ~ text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d 7 956.25 990.96 -471.13 942.25
## mod.d.l 8 953.69 993.36 -468.84 937.69 4.5637 1 0.03266 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l, mod.d.l.g, test='Chisq')
## Data: dat
## Models:
## mod.d.l: status ~ text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g: status ~ goal_sc + text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l 8 953.69 993.36 -468.84 937.69
## mod.d.l.g 9 917.27 961.89 -449.63 899.27 38.422 1 5.699e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g, mod.d.l.g.i, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g: status ~ goal_sc + text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g.i: status ~ inst + goal_sc + text_length_words_sc + dur_cat + (1 |
## mod.d.l.g.i: year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g 9 917.27 961.89 -449.63 899.27
## mod.d.l.g.i 12 920.65 980.15 -448.33 896.65 2.6132 3 0.4552
anova(mod.d.l.g.i, mod.d.l.g.i.p, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i: status ~ inst + goal_sc + text_length_words_sc + dur_cat + (1 |
## mod.d.l.g.i: year)
## mod.d.l.g.i.p: status ~ photos_sc + inst + goal_sc + text_length_words_sc +
## mod.d.l.g.i.p: dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i 12 920.65 980.15 -448.33 896.65
## mod.d.l.g.i.p 13 919.90 984.36 -446.95 893.90 2.7531 1 0.09706 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p, mod.d.l.g.i.p.u, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p: status ~ photos_sc + inst + goal_sc + text_length_words_sc +
## mod.d.l.g.i.p: dur_cat + (1 | year)
## mod.d.l.g.i.p.u: status ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc +
## mod.d.l.g.i.p.u: dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i.p 13 919.90 984.36 -446.95 893.90
## mod.d.l.g.i.p.u 14 918.06 987.48 -445.03 890.06 3.835 1 0.05019
##
## mod.d.l.g.i.p
## mod.d.l.g.i.p.u .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u, mod.d.l.g.i.p.u.c, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p.u: status ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc +
## mod.d.l.g.i.p.u: dur_cat + (1 | year)
## mod.d.l.g.i.p.u.c: status ~ comments_sc + updates_sc + photos_sc + inst + goal_sc +
## mod.d.l.g.i.p.u.c: text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u 14 918.06 987.48 -445.03 890.06
## mod.d.l.g.i.p.u.c 15 909.22 983.60 -439.61 879.22 10.844 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u
## mod.d.l.g.i.p.u.c 0.0009911 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c, mod.d.l.g.i.p.u.c.f, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c: status ~ comments_sc + updates_sc + photos_sc + inst + goal_sc +
## mod.d.l.g.i.p.u.c: text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g.i.p.u.c.f: status ~ friends_sc + comments_sc + updates_sc + photos_sc +
## mod.d.l.g.i.p.u.c.f: inst + goal_sc + text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c 15 909.22 983.60 -439.61 879.22
## mod.d.l.g.i.p.u.c.f 16 910.33 989.66 -439.16 878.33 0.8944 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c
## mod.d.l.g.i.p.u.c.f 0.3443
anova(mod.d.l.g.i.p.u.c.f, mod.d.l.g.i.p.u.c.f.s, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f: status ~ friends_sc + comments_sc + updates_sc + photos_sc +
## mod.d.l.g.i.p.u.c.f: inst + goal_sc + text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g.i.p.u.c.f.s: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f 16 910.33 989.66 -439.16 878.33
## mod.d.l.g.i.p.u.c.f.s 17 895.66 979.95 -430.83 861.66 16.67 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f
## mod.d.l.g.i.p.u.c.f.s 4.448e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The final base model before adding metaphor variables:
summary(mod.d.l.g.i.p.u.c.f.s)
## Generalized linear mixed model fit by maximum likelihood (Adaptive
## Gauss-Hermite Quadrature, nAGQ = 0) [glmerMod]
## Family: binomial ( logit )
## Formula: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## (1 | year)
## Data: dat
##
## AIC BIC logLik deviance df.resid
## 895.7 979.9 -430.8 861.7 1035
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.1749 -0.4979 -0.3884 -0.1701 10.7705
##
## Random effects:
## Groups Name Variance Std.Dev.
## year (Intercept) 0 0
## Number of obs: 1052, groups: year, 6
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.917741 0.206239 -9.299 < 2e-16 ***
## shares_sc 0.748566 0.189913 3.942 8.09e-05 ***
## friends_sc 0.037991 0.087759 0.433 0.6651
## comments_sc 0.161000 0.113029 1.424 0.1543
## updates_sc -0.532056 0.210262 -2.530 0.0114 *
## photos_sc 0.222148 0.130103 1.707 0.0877 .
## instnone -0.018791 0.226887 -0.083 0.9340
## instsecondhalf -0.326627 0.279023 -1.171 0.2418
## instsecondquarter 0.235555 0.307449 0.766 0.4436
## goal_sc -1.861764 0.318756 -5.841 5.20e-09 ***
## text_length_words_sc -0.109768 0.111038 -0.989 0.3229
## dur_cat.L 0.202897 0.288209 0.704 0.4814
## dur_cat.Q 0.386806 0.242672 1.594 0.1109
## dur_cat.C -0.015489 0.228861 -0.068 0.9460
## dur_cat^4 0.008641 0.217278 0.040 0.9683
## dur_cat^5 0.203603 0.189334 1.075 0.2822
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 16 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
It appears that the intercept itself, the number of shares via Facebook, and the goal amount are all highly significant predictors of success. The goal amount is also a significant predictor.
Add metaphors
Use nAQG=0 because nAQG=1 cannot converge in a reasonable number (10,000) of iterations
See https://stats.stackexchange.com/questions/77313/why-cant-i-match-glmer-family-binomial-output-with-manual-implementation-of-g and https://www.rdocumentation.org/packages/lme4/versions/1.1-19/topics/glmer
# mod.no_metaphor = glmer(status ~ no_metaphor + shares_sc + friends_sc + comments_sc + goal_sc + updates_sc + photos_sc + text_length_words_sc + dur_cat + inst + (1|year),
# data = dat, family = "binomial", nAGQ = 0)
# mod.any_metaphor = glmer(status ~ any_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
# data = dat, family = "binomial", nAGQ = 0)
mod.dom_journey = glmer(status ~ dom_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
mod.dom_journey.prod = glmer(status ~ journey_prod + dom_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
mod.dom_battle = glmer(status ~ dom_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
mod.dom_battle.prod = glmer(status ~ battle_prod + dom_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
mod.only_journey = glmer(status ~ only_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
mod.only_battle = glmer(status ~ only_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
mod.both_metaphor = glmer(status ~ both_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = "binomial", nAGQ = 0)
# anova(mod.d.l.g.i.p.u.c.f.s, mod.no_metaphor)
# anova(mod.d.l.g.i.p.u.c.f.s, mod.any_metaphor)
anova(mod.d.l.g.i.p.u.c.f.s, mod.dom_journey)
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.dom_journey: status ~ dom_journey + shares_sc + friends_sc + comments_sc +
## mod.dom_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_journey: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 17 895.66 979.95 -430.83 861.66
## mod.dom_journey 18 893.03 982.29 -428.52 857.03 4.6231 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.dom_journey 0.03154 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.dom_journey, mod.dom_journey.prod)
## Data: dat
## Models:
## mod.dom_journey: status ~ dom_journey + shares_sc + friends_sc + comments_sc +
## mod.dom_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_journey: dur_cat + inst + (1 | year)
## mod.dom_journey.prod: status ~ journey_prod + dom_journey + shares_sc + friends_sc +
## mod.dom_journey.prod: comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_journey.prod: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.dom_journey 18 893.03 982.29 -428.52 857.03
## mod.dom_journey.prod 19 894.08 988.29 -428.04 856.08 0.9577 1
## Pr(>Chisq)
## mod.dom_journey
## mod.dom_journey.prod 0.3278
anova(mod.d.l.g.i.p.u.c.f.s, mod.dom_battle)
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.dom_battle: status ~ dom_battle + shares_sc + friends_sc + comments_sc +
## mod.dom_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_battle: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 17 895.66 979.95 -430.83 861.66
## mod.dom_battle 18 896.64 985.89 -430.32 860.64 1.0191 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.dom_battle 0.3127
anova(mod.dom_battle, mod.dom_battle.prod)
## Data: dat
## Models:
## mod.dom_battle: status ~ dom_battle + shares_sc + friends_sc + comments_sc +
## mod.dom_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_battle: dur_cat + inst + (1 | year)
## mod.dom_battle.prod: status ~ battle_prod + dom_battle + shares_sc + friends_sc +
## mod.dom_battle.prod: comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_battle.prod: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.dom_battle 18 896.64 985.89 -430.32 860.64
## mod.dom_battle.prod 19 898.63 992.84 -430.31 860.63 0.0084 1
## Pr(>Chisq)
## mod.dom_battle
## mod.dom_battle.prod 0.9271
anova(mod.d.l.g.i.p.u.c.f.s, mod.only_journey)
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.only_journey: status ~ only_journey + shares_sc + friends_sc + comments_sc +
## mod.only_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.only_journey: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 17 895.66 979.95 -430.83 861.66
## mod.only_journey 18 893.53 982.78 -428.76 857.53 4.1294 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.only_journey 0.04214 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c.f.s, mod.only_battle)
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.only_battle: status ~ only_battle + shares_sc + friends_sc + comments_sc +
## mod.only_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.only_battle: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 17 895.66 979.95 -430.83 861.66
## mod.only_battle 18 897.51 986.76 -430.75 861.51 0.1495 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.only_battle 0.699
anova(mod.d.l.g.i.p.u.c.f.s, mod.both_metaphor)
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: status ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.both_metaphor: status ~ both_metaphor + shares_sc + friends_sc + comments_sc +
## mod.both_metaphor: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.both_metaphor: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 17 895.66 979.95 -430.83 861.66
## mod.both_metaphor 18 896.71 985.96 -430.36 860.71 0.9434 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.both_metaphor 0.3314
The journey metaphor as the dominant metaphor almost signficantly predicts lower success (higher failure). Having only journey metaphors almost significantly lowers success.
Number of Backers
library(glmmTMB)
nrow(dat[dat$backers > 1200, ])
## [1] 11
ggplot() + labs(x="Number of Backers", title="Number of Backers Density") +
geom_density(aes(dat$backers[dat$backers < 1200]))

We limit to 1200 because removing the outliers leaves us with a nicely shaped distribution.
dat.b <- dat[dat$backers < 1200, ]
Runa quick data dispersion test (see Rice 1995):
pchisq(2 * sum(dat$backers * log(dat$backers / mean(dat$backers))), length(dat$backers) - 1, lower.tail = F)
## [1] 0
H0: The data are fit well by a Poisson Distribution H1: Poisson fails to fit the data well
The Poisson distribution obviously does not fit the data well since p approx 0. Let’s use a NegBin instead, which can account for differences in the mean and variance.
dat.b %>%
ggplot(aes(goal, backers)) + labs(title="Goal Amount Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(dur_cat, backers)) + labs(title="Duration Distribution") +
geom_boxplot() +
theme_minimal()

dat.b %>%
ggplot(aes(text_length_words, backers)) + labs(title="Text Length Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(photos, backers)) + labs(title="Photos Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(updates, backers)) + labs(title="Updates Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(friends, backers)) + labs(title="FB Friends Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(comments, backers)) + labs(title="Comments Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(shares, backers)) + labs(title="FB Shares Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat.b %>%
ggplot(aes(cancer_type, backers)) + labs(title="Cancer Types") +
geom_boxplot() +
theme_minimal() +
theme(axis.text.x=element_text(angle = 60, hjust=1))

Model backers
# no fixed effects, only random
mod.n <- glmmTMB(backers ~ (1|year), data = dat.b, family="nbinom2")
# add duration category
mod.d <- glmmTMB(backers ~ dur_cat + (1|year), data = dat.b, family="nbinom2")
# add length of text (in words)
mod.d.l <- glmmTMB(backers ~ text_length_words_sc + dur_cat + (1|year), data = dat.b, family="nbinom2")
# add scaled goal amount
mod.d.l.g <- glmmTMB(backers ~ goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat.b, family="nbinom2")
# add first instantiation
mod.d.l.g.i <- glmmTMB(backers ~ inst + goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat.b, family="nbinom2")
# add photos
mod.d.l.g.i.p <- glmmTMB(backers ~ photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat.b, family="nbinom2")
# add updates
mod.d.l.g.i.p.u <- glmmTMB(backers ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat.b, family="nbinom2")
# add comments
mod.d.l.g.i.p.u.c = glmmTMB(backers ~ comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat.b, family="nbinom2")
# add friends
mod.d.l.g.i.p.u.c.f = glmmTMB(backers ~ friends_sc + comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat.b, family="nbinom2")
# add shares
mod.d.l.g.i.p.u.c.f.s = glmmTMB(backers ~ shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat.b, family="nbinom2")
anova(mod.n, mod.d, test='Chisq')
## Data: dat.b
## Models:
## mod.n: backers ~ (1 | year), zi=~0, disp=~1
## mod.d: backers ~ dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.n 3 12342 12357 -6168.1 12336
## mod.d 8 12337 12377 -6160.7 12321 14.765 5 0.01141 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d, mod.d.l, test='Chisq')
## Data: dat.b
## Models:
## mod.d: backers ~ dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l: backers ~ text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d 8 12337 12377 -6160.7 12321
## mod.d.l 9 12303 12348 -6142.5 12285 36.306 1 1.686e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l, mod.d.l.g, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l: backers ~ text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l.g: backers ~ goal_sc + text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l 9 12303 12348 -6142.5 12285
## mod.d.l.g 10 11976 12025 -5977.8 11956 329.56 1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g, mod.d.l.g.i, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l.g: backers ~ goal_sc + text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l.g.i: backers ~ inst + goal_sc + text_length_words_sc + dur_cat + (1 | , zi=~0, disp=~1
## mod.d.l.g.i: year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g 10 11976 12025 -5977.8 11956
## mod.d.l.g.i 13 11972 12036 -5972.9 11946 9.7738 3 0.02059 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i, mod.d.l.g.i.p, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l.g.i: backers ~ inst + goal_sc + text_length_words_sc + dur_cat + (1 | , zi=~0, disp=~1
## mod.d.l.g.i: year), zi=~0, disp=~1
## mod.d.l.g.i.p: backers ~ photos_sc + inst + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p: dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i 13 11972 12036 -5972.9 11946
## mod.d.l.g.i.p 14 11915 11984 -5943.6 11887 58.479 1 2.055e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p, mod.d.l.g.i.p.u, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l.g.i.p: backers ~ photos_sc + inst + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p: dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l.g.i.p.u: backers ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u: dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i.p 14 11915 11984 -5943.6 11887
## mod.d.l.g.i.p.u 15 11916 11991 -5943.2 11886 0.877 1 0.349
anova(mod.d.l.g.i.p.u, mod.d.l.g.i.p.u.c, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u: backers ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u: dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l.g.i.p.u.c: backers ~ comments_sc + updates_sc + photos_sc + inst + goal_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c: text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i.p.u 15 11916 11991 -5943.2 11886
## mod.d.l.g.i.p.u.c 16 11887 11966 -5927.4 11855 31.623 1 1.872e-08
##
## mod.d.l.g.i.p.u
## mod.d.l.g.i.p.u.c ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c, mod.d.l.g.i.p.u.c.f, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c: backers ~ comments_sc + updates_sc + photos_sc + inst + goal_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c: text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f: backers ~ friends_sc + comments_sc + updates_sc + photos_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f: inst + goal_sc + text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c 16 11887 11966 -5927.4 11855
## mod.d.l.g.i.p.u.c.f 17 11871 11955 -5918.6 11837 17.524 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c
## mod.d.l.g.i.p.u.c.f 2.836e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c.f, mod.d.l.g.i.p.u.c.f.s, test='Chisq')
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c.f: backers ~ friends_sc + comments_sc + updates_sc + photos_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f: inst + goal_sc + text_length_words_sc + dur_cat + (1 | year), zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: backers ~ shares_sc + friends_sc + comments_sc + updates_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f 17 11871 11955 -5918.6 11837
## mod.d.l.g.i.p.u.c.f.s 18 11625 11714 -5794.3 11589 248.68 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f
## mod.d.l.g.i.p.u.c.f.s < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod.d.l.g.i.p.u.c.f.s)
## Family: nbinom2 ( log )
## Formula:
## backers ~ shares_sc + friends_sc + comments_sc + updates_sc +
## photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## (1 | year)
## Data: dat.b
##
## AIC BIC logLik deviance df.resid
## 11624.6 11713.6 -5794.3 11588.6 1023
##
## Random effects:
##
## Conditional model:
## Groups Name Variance Std.Dev.
## year (Intercept) 7.044e-10 2.654e-05
## Number of obs: 1041, groups: year, 6
##
## Overdispersion parameter for nbinom2 family (): 1.87
##
## Conditional model:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.83064 0.04924 98.11 < 2e-16 ***
## shares_sc 0.98043 0.06648 14.75 < 2e-16 ***
## friends_sc 0.04560 0.02433 1.87 0.060872 .
## comments_sc 0.03131 0.03276 0.96 0.339135
## updates_sc -0.06942 0.04497 -1.54 0.122704
## photos_sc 0.12014 0.03495 3.44 0.000588 ***
## instnone -0.11514 0.06069 -1.90 0.057782 .
## instsecondhalf -0.06253 0.06819 -0.92 0.359164
## instsecondquarter 0.03710 0.08440 0.44 0.660213
## goal_sc 0.50436 0.04666 10.81 < 2e-16 ***
## text_length_words_sc 0.04999 0.02528 1.98 0.048004 *
## dur_cat.L 0.05949 0.07982 0.75 0.456075
## dur_cat.Q 0.12569 0.06717 1.87 0.061314 .
## dur_cat.C 0.03883 0.06266 0.62 0.535454
## dur_cat^4 -0.19877 0.05813 -3.42 0.000628 ***
## dur_cat^5 0.04274 0.04923 0.87 0.385268
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Add metaphors
# mod.no_metaphor = glmmTMB(backers ~ no_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
# data = dat.b, family = "nbinom2")
# mod.any_metaphor = glmmTMB(backers ~ any_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
# data = dat.b, family = "nbinom2")
mod.dom_journey = glmmTMB(backers ~ dom_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
mod.dom_journey.prod = glmmTMB(backers ~ journey_prod + dom_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
mod.dom_battle = glmmTMB(backers ~ dom_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
mod.dom_battle.prod = glmmTMB(backers ~ battle_prod + dom_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
mod.only_journey = glmmTMB(backers ~ only_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
mod.only_battle = glmmTMB(backers ~ only_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
mod.both_metaphor = glmmTMB(backers ~ both_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat.b, family = "nbinom2")
# anova(mod.d.l.g.i.p.u.c.f.s, mod.no_metaphor)
# anova(mod.d.l.g.i.p.u.c.f.s, mod.any_metaphor)
anova(mod.d.l.g.i.p.u.c.f.s, mod.dom_journey)
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c.f.s: backers ~ shares_sc + friends_sc + comments_sc + updates_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: (1 | year), zi=~0, disp=~1
## mod.dom_journey: backers ~ dom_journey + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.dom_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.dom_journey: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 11625 11714 -5794.3 11589
## mod.dom_journey 19 11626 11720 -5794.1 11588 0.2697 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.dom_journey 0.6035
anova(mod.dom_journey, mod.dom_journey.prod)
## Data: dat.b
## Models:
## mod.dom_journey: backers ~ dom_journey + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.dom_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.dom_journey: dur_cat + inst + (1 | year), zi=~0, disp=~1
## mod.dom_journey.prod: backers ~ journey_prod + dom_journey + shares_sc + friends_sc + , zi=~0, disp=~1
## mod.dom_journey.prod: comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.dom_journey.prod: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.dom_journey 19 11626 11720 -5794.1 11588
## mod.dom_journey.prod 20 11628 11727 -5794.0 11588 0.3793 1
## Pr(>Chisq)
## mod.dom_journey
## mod.dom_journey.prod 0.538
anova(mod.d.l.g.i.p.u.c.f.s, mod.dom_battle)
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c.f.s: backers ~ shares_sc + friends_sc + comments_sc + updates_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: (1 | year), zi=~0, disp=~1
## mod.dom_battle: backers ~ dom_battle + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.dom_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.dom_battle: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 11625 11714 -5794.3 11589
## mod.dom_battle 19 11625 11719 -5793.6 11587 1.3677 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.dom_battle 0.2422
anova(mod.dom_battle, mod.dom_battle.prod)
## Data: dat.b
## Models:
## mod.dom_battle: backers ~ dom_battle + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.dom_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.dom_battle: dur_cat + inst + (1 | year), zi=~0, disp=~1
## mod.dom_battle.prod: backers ~ battle_prod + dom_battle + shares_sc + friends_sc + , zi=~0, disp=~1
## mod.dom_battle.prod: comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.dom_battle.prod: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.dom_battle 19 11625 11719 -5793.6 11587
## mod.dom_battle.prod 20 11626 11725 -5793.1 11586 0.8973 1
## Pr(>Chisq)
## mod.dom_battle
## mod.dom_battle.prod 0.3435
anova(mod.d.l.g.i.p.u.c.f.s, mod.only_journey)
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c.f.s: backers ~ shares_sc + friends_sc + comments_sc + updates_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: (1 | year), zi=~0, disp=~1
## mod.only_journey: backers ~ only_journey + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.only_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.only_journey: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 11625 11714 -5794.3 11589
## mod.only_journey 19 11626 11720 -5794.2 11588 0.0542 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.only_journey 0.8159
anova(mod.d.l.g.i.p.u.c.f.s, mod.only_battle)
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c.f.s: backers ~ shares_sc + friends_sc + comments_sc + updates_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: (1 | year), zi=~0, disp=~1
## mod.only_battle: backers ~ only_battle + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.only_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.only_battle: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 11625 11714 -5794.3 11589
## mod.only_battle 19 11625 11719 -5793.7 11587 1.1951 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.only_battle 0.2743
anova(mod.d.l.g.i.p.u.c.f.s, mod.both_metaphor)
## Data: dat.b
## Models:
## mod.d.l.g.i.p.u.c.f.s: backers ~ shares_sc + friends_sc + comments_sc + updates_sc + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + , zi=~0, disp=~1
## mod.d.l.g.i.p.u.c.f.s: (1 | year), zi=~0, disp=~1
## mod.both_metaphor: backers ~ both_metaphor + shares_sc + friends_sc + comments_sc + , zi=~0, disp=~1
## mod.both_metaphor: updates_sc + photos_sc + goal_sc + text_length_words_sc + , zi=~0, disp=~1
## mod.both_metaphor: dur_cat + inst + (1 | year), zi=~0, disp=~1
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 11625 11714 -5794.3 11589
## mod.both_metaphor 19 11625 11719 -5793.6 11587 1.2987 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.both_metaphor 0.2544
It appears that the intercept itself, the number of shares via Facebook, the number of updates on the project page, the number of photos uploaded by the project creator, and the goal amount are all highly significant indicators of the number of backers. Not having any metaphors significantly decreases backers and higher number of words increases backers. A quartic regression of duration explains the data well. No metaphorical variables significantly explain the data.
Mean Donation
dat %>%
ggplot() + labs(title="Mean Donation Density") +
geom_density(aes(mean_donation+1))

dat = dat[dat$mean_donation < 500, ]
dat %>%
ggplot() + geom_qq(aes(sample=mean_donation+1), distribution = qexp) + geom_qq_line(aes(sample=mean_donation+1), distribution = qexp)

dat %>%
ggplot(aes(goal, mean_donation)) + labs(title="Goal Amount Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(dur_cat, mean_donation)) + labs(title="Duration Distribution") +
geom_boxplot() +
theme_minimal()

dat %>%
ggplot(aes(text_length_words, mean_donation)) + labs(title="Text Length Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(photos, mean_donation)) + labs(title="Photos Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(updates, mean_donation)) + labs(title="Updates Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(friends, mean_donation)) + labs(title="FB Friends Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(comments, mean_donation)) + labs(title="Comments Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(shares, mean_donation)) + labs(title="FB Shares Distribution") +
geom_point(aes(alpha=0.1)) +
theme_minimal()

dat %>%
ggplot(aes(cancer_type, mean_donation)) + labs(title="Cancer Types") +
geom_boxplot() +
theme_minimal() +
theme(axis.text.x=element_text(angle = 60, hjust=1))

The data fit an exponential fairly well, so we model with Gamma and a log link (see above answer for reason).
Model mean donation
# no fixed effects, only random
mod.n = glmer(mean_donation+1 ~ (1|year), data = dat, family = Gamma(link = "log"))
# add duration category
mod.d = glmer(mean_donation+1 ~ dur_cat + (1|year), data = dat, family = Gamma(link = "log"))
## singular fit
# add length of text (in words)
mod.d.l = glmer(mean_donation+1 ~ text_length_words_sc + dur_cat + (1|year), data = dat, family = Gamma(link = "log"))
## singular fit
# add scaled goal amount
mod.d.l.g = glmer(mean_donation+1 ~ goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat, family = Gamma(link = "log"))
## singular fit
# add first instantiation
mod.d.l.g.i = glmer(mean_donation+1 ~ inst + goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat, family = Gamma(link = "log"))
## singular fit
# add photos
mod.d.l.g.i.p <- glmer(mean_donation+1 ~ photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat, family = Gamma(link = "log"))
## singular fit
# add updates
mod.d.l.g.i.p.u <- glmer(mean_donation+1 ~ updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year), data = dat, family = Gamma(link = "log"))
## singular fit
# add comments
mod.d.l.g.i.p.u.c = glmer(mean_donation+1 ~ comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
# add friends
mod.d.l.g.i.p.u.c.f = glmer(mean_donation+1 ~ friends_sc + comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
# add shares
mod.d.l.g.i.p.u.c.f.s = glmer(mean_donation+1 ~ shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + inst + goal_sc + text_length_words_sc + dur_cat + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
anova(mod.n, mod.d, test='Chisq')
## Data: dat
## Models:
## mod.n: mean_donation + 1 ~ (1 | year)
## mod.d: mean_donation + 1 ~ dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.n 3 10631 10646 -5312.4 10625
## mod.d 8 10634 10674 -5309.0 10618 6.8226 5 0.2342
anova(mod.d, mod.d.l, test='Chisq')
## Data: dat
## Models:
## mod.d: mean_donation + 1 ~ dur_cat + (1 | year)
## mod.d.l: mean_donation + 1 ~ text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d 8 10634 10674 -5309.0 10618
## mod.d.l 9 10632 10676 -5306.7 10614 4.5395 1 0.03312 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l, mod.d.l.g, test='Chisq')
## Data: dat
## Models:
## mod.d.l: mean_donation + 1 ~ text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g: mean_donation + 1 ~ goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g: (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l 9 10632 10676 -5306.7 10614
## mod.d.l.g 10 10547 10597 -5263.5 10527 86.473 1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g, mod.d.l.g.i, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g: mean_donation + 1 ~ goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g: (1 | year)
## mod.d.l.g.i: mean_donation + 1 ~ inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i: (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g 10 10547 10597 -5263.5 10527
## mod.d.l.g.i 13 10546 10611 -5260.1 10520 6.8005 3 0.07854 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i, mod.d.l.g.i.p, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i: mean_donation + 1 ~ inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i: (1 | year)
## mod.d.l.g.i.p: mean_donation + 1 ~ photos_sc + inst + goal_sc + text_length_words_sc +
## mod.d.l.g.i.p: dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i 13 10546 10611 -5260.1 10520
## mod.d.l.g.i.p 14 10541 10610 -5256.5 10513 7.194 1 0.007315 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p, mod.d.l.g.i.p.u, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p: mean_donation + 1 ~ photos_sc + inst + goal_sc + text_length_words_sc +
## mod.d.l.g.i.p: dur_cat + (1 | year)
## mod.d.l.g.i.p.u: mean_donation + 1 ~ updates_sc + photos_sc + inst + goal_sc +
## mod.d.l.g.i.p.u: text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i.p 14 10541 10610 -5256.5 10513
## mod.d.l.g.i.p.u 15 10540 10614 -5254.9 10510 3.1747 1 0.07479 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u, mod.d.l.g.i.p.u.c, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p.u: mean_donation + 1 ~ updates_sc + photos_sc + inst + goal_sc +
## mod.d.l.g.i.p.u: text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g.i.p.u.c: mean_donation + 1 ~ comments_sc + updates_sc + photos_sc + inst +
## mod.d.l.g.i.p.u.c: goal_sc + text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mod.d.l.g.i.p.u 15 10540 10614 -5254.9 10510
## mod.d.l.g.i.p.u.c 16 10538 10617 -5253.1 10506 3.6891 1 0.05477
##
## mod.d.l.g.i.p.u
## mod.d.l.g.i.p.u.c .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c, mod.d.l.g.i.p.u.c.f, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c: mean_donation + 1 ~ comments_sc + updates_sc + photos_sc + inst +
## mod.d.l.g.i.p.u.c: goal_sc + text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g.i.p.u.c.f: mean_donation + 1 ~ friends_sc + comments_sc + updates_sc + photos_sc +
## mod.d.l.g.i.p.u.c.f: inst + goal_sc + text_length_words_sc + dur_cat + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c 16 10538 10617 -5253.1 10506
## mod.d.l.g.i.p.u.c.f 17 10528 10613 -5247.2 10494 11.818 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c
## mod.d.l.g.i.p.u.c.f 0.0005867 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c.f, mod.d.l.g.i.p.u.c.f.s, test='Chisq')
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f: mean_donation + 1 ~ friends_sc + comments_sc + updates_sc + photos_sc +
## mod.d.l.g.i.p.u.c.f: inst + goal_sc + text_length_words_sc + dur_cat + (1 | year)
## mod.d.l.g.i.p.u.c.f.s: mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f 17 10528 10613 -5247.2 10494
## mod.d.l.g.i.p.u.c.f.s 18 10512 10602 -5238.3 10476 17.796 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f
## mod.d.l.g.i.p.u.c.f.s 2.459e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod.d.l.g.i.p.u.c.f.s)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: Gamma ( log )
## Formula:
## mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## (1 | year)
## Data: dat
##
## AIC BIC logLik deviance df.resid
## 10512.5 10601.7 -5238.3 10476.5 1031
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.8436 -0.6471 -0.1327 0.4307 6.9597
##
## Random effects:
## Groups Name Variance Std.Dev.
## year (Intercept) 0.0000 0.0000
## Residual 0.2015 0.4489
## Number of obs: 1049, groups: year, 6
##
## Fixed effects:
## Estimate Std. Error t value Pr(>|z|)
## (Intercept) 4.4893674 0.0280290 160.169 < 2e-16 ***
## shares_sc -0.1171179 0.0270590 -4.328 1.5e-05 ***
## friends_sc -0.0368704 0.0133066 -2.771 0.00559 **
## comments_sc 0.0005182 0.0185281 0.028 0.97769
## updates_sc 0.0648605 0.0271654 2.388 0.01696 *
## photos_sc -0.0414823 0.0182199 -2.277 0.02280 *
## instnone -0.0298241 0.0345531 -0.863 0.38806
## instsecondhalf 0.0522849 0.0388511 1.346 0.17837
## instsecondquarter 0.0766515 0.0478274 1.603 0.10901
## goal_sc 0.2148354 0.0221380 9.704 < 2e-16 ***
## text_length_words_sc 0.0093288 0.0149804 0.623 0.53346
## dur_cat.L 0.0109864 0.0447438 0.246 0.80604
## dur_cat.Q -0.0480323 0.0378592 -1.269 0.20454
## dur_cat.C -0.0968333 0.0350208 -2.765 0.00569 **
## dur_cat^4 0.0225792 0.0328541 0.687 0.49192
## dur_cat^5 0.0130812 0.0280177 0.467 0.64058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 16 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
## convergence code: 0
## singular fit
Add metaphors
# mod.no_metaphor = glmer(mean_donation+1 ~ no_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
# data = dat, family = Gamma(link = "log"))
# mod.any_metaphor = glmer(mean_donation+1 ~ any_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
# data = dat, family = Gamma(link = "log"))
mod.dom_journey = glmer(mean_donation+1 ~ dom_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
mod.dom_journey.prod = glmer(mean_donation+1 ~ journey_prod + dom_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
mod.dom_battle = glmer(mean_donation+1 ~ dom_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
mod.dom_battle.prod = glmer(mean_donation+1 ~ battle_prod + dom_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
mod.only_journey = glmer(mean_donation+1 ~ only_journey + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
mod.only_battle = glmer(mean_donation+1 ~ only_battle + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
mod.both_metaphor = glmer(mean_donation+1 ~ both_metaphor + shares_sc + friends_sc + comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc + dur_cat + inst + (1|year),
data = dat, family = Gamma(link = "log"))
## singular fit
# anova(mod.d.l.g.i.p.u.c.f.s, mod.no_metaphor, test="Chisq")
# anova(mod.d.l.g.i.p.u.c.f.s, mod.any_metaphor, test="Chisq")
anova(mod.d.l.g.i.p.u.c.f.s, mod.dom_journey, test="Chisq")
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.dom_journey: mean_donation + 1 ~ dom_journey + shares_sc + friends_sc + comments_sc +
## mod.dom_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_journey: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 10512 10602 -5238.3 10476
## mod.dom_journey 19 10512 10606 -5236.9 10474 2.8231 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.dom_journey 0.09292 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.dom_journey, mod.dom_journey.prod, test="Chisq")
## Data: dat
## Models:
## mod.dom_journey: mean_donation + 1 ~ dom_journey + shares_sc + friends_sc + comments_sc +
## mod.dom_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_journey: dur_cat + inst + (1 | year)
## mod.dom_journey.prod: mean_donation + 1 ~ journey_prod + dom_journey + shares_sc +
## mod.dom_journey.prod: friends_sc + comments_sc + updates_sc + photos_sc + goal_sc +
## mod.dom_journey.prod: text_length_words_sc + dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.dom_journey 19 10512 10606 -5236.9 10474
## mod.dom_journey.prod 20 10514 10613 -5236.8 10474 0.0705 1
## Pr(>Chisq)
## mod.dom_journey
## mod.dom_journey.prod 0.7906
anova(mod.d.l.g.i.p.u.c.f.s, mod.dom_battle, test="Chisq")
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.dom_battle: mean_donation + 1 ~ dom_battle + shares_sc + friends_sc + comments_sc +
## mod.dom_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_battle: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 10512 10602 -5238.3 10476
## mod.dom_battle 19 10509 10603 -5235.5 10471 5.5889 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.dom_battle 0.01807 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.dom_battle, mod.dom_battle.prod, test="Chisq")
## Data: dat
## Models:
## mod.dom_battle: mean_donation + 1 ~ dom_battle + shares_sc + friends_sc + comments_sc +
## mod.dom_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_battle: dur_cat + inst + (1 | year)
## mod.dom_battle.prod: mean_donation + 1 ~ battle_prod + dom_battle + shares_sc + friends_sc +
## mod.dom_battle.prod: comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.dom_battle.prod: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.dom_battle 19 10509 10603 -5235.5 10471
## mod.dom_battle.prod 20 10511 10610 -5235.4 10471 0.1036 1
## Pr(>Chisq)
## mod.dom_battle
## mod.dom_battle.prod 0.7476
anova(mod.d.l.g.i.p.u.c.f.s, mod.only_journey, test="Chisq")
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.only_journey: mean_donation + 1 ~ only_journey + shares_sc + friends_sc + comments_sc +
## mod.only_journey: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.only_journey: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 10512 10602 -5238.3 10476
## mod.only_journey 19 10513 10607 -5237.5 10475 1.5262 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.only_journey 0.2167
anova(mod.d.l.g.i.p.u.c.f.s, mod.only_battle, test="Chisq")
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.only_battle: mean_donation + 1 ~ only_battle + shares_sc + friends_sc + comments_sc +
## mod.only_battle: updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.only_battle: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 10512 10602 -5238.3 10476
## mod.only_battle 19 10509 10603 -5235.5 10471 5.6452 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.only_battle 0.0175 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.d.l.g.i.p.u.c.f.s, mod.both_metaphor, test="Chisq")
## Data: dat
## Models:
## mod.d.l.g.i.p.u.c.f.s: mean_donation + 1 ~ shares_sc + friends_sc + comments_sc + updates_sc +
## mod.d.l.g.i.p.u.c.f.s: photos_sc + inst + goal_sc + text_length_words_sc + dur_cat +
## mod.d.l.g.i.p.u.c.f.s: (1 | year)
## mod.both_metaphor: mean_donation + 1 ~ both_metaphor + shares_sc + friends_sc +
## mod.both_metaphor: comments_sc + updates_sc + photos_sc + goal_sc + text_length_words_sc +
## mod.both_metaphor: dur_cat + inst + (1 | year)
## Df AIC BIC logLik deviance Chisq Chi Df
## mod.d.l.g.i.p.u.c.f.s 18 10512 10602 -5238.3 10476
## mod.both_metaphor 19 10511 10605 -5236.5 10473 3.5951 1
## Pr(>Chisq)
## mod.d.l.g.i.p.u.c.f.s
## mod.both_metaphor 0.05795 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
It appears that the number of shares via Facebook, the number of Facebook friends the project creator has, and the number of photos uploaded to the project page all significantly decrease the mean donation. Higher numbers of updates and higher goal amounts significantly increase the mean donation. The data is explained well by a cubic regression over duration. Most importantly though, having only battle metaphors significantly (although only slightly) increases mean donation, having the battle metaphor dominate significantly increases mean donation, having both metaphors almost significantly decreases mean donation.